package com.cc.controller;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFColor;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import javax.servlet.http.HttpServletResponse;
import java.awt.Color;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Arrays;
import java.util.List;

/**
 * @author 新梦想.陈超
 * @version 2021.2
 * @Description: {TODO}
 * @date 2022/5/27 下午4:08
 */
@Controller
@RequestMapping("repeat")
public class RepeatController {

    /**客户端贡献列表*/
    @RequestMapping("contr/list")
    public String listContr(@RequestParam(value = "page",defaultValue = "1") Integer page ,
                            @RequestParam(value = "page",defaultValue = "10") Integer pageSize){
        //TODO 1.调用service
        //TODO 2.绑定数据
        //TODO 3.返回View
        return "~rept/contr";
    }

    /**
     * 客户贡献报表
     * @param response
     */
    @RequestMapping("contr/download")
    public void download(HttpServletResponse response){
        //TODO 1.查询数据库 orders和orderline进行客户分组，按价格统计
        //TODO 2.生成execl（这里我们模拟）
        List<Person> list = Arrays.asList(new Person(1,"码云", 100 * 100),
                new Person(2,"马化腾", 1000 * 100));
        // 1.excel文件对象
        XSSFWorkbook wb = new XSSFWorkbook();
        // 2.根据excel文件创建一个sheet对象
        Sheet sheet = wb.createSheet("users");// 创建一张表
        //3.创建单元格
        Row topRow = sheet.createRow(0);// 创建第一行，起始为0
        Cell cell1 = topRow.createCell(0);
        //创建单元格的样式
        XSSFCellStyle cellStyle = wb.createCellStyle();
        cellStyle.setAlignment(HorizontalAlignment.CENTER); // 居中

//        cellStyle.setFillPattern(XSSFCellStyle.);
//        cellStyle.setFillForegroundColor(IndexedColors.BLUE.getIndex());
//        cellStyle.setFillBackgroundColor(IndexedColors.RED.getIndex());//设置背景色

        cell1.setCellStyle(cellStyle);
        cell1.setCellValue("序号");
        //4.合并单元格
        CellRangeAddress region = new CellRangeAddress(0, 0, 0, 5);
        sheet.addMergedRegion(region);
//        sheet.setHorizontallyCenter(true);
        //5.写表头
        Row titleRow = sheet.createRow(1);// 创建第一行，起始为0
        titleRow.createCell(0).setCellValue("序号");
        titleRow.createCell(1).setCellValue("姓名");// 第一列
        titleRow.createCell(2).setCellValue("公司");
        titleRow.createCell(3).setCellValue("添加人");
        titleRow.createCell(4).setCellValue("邮箱");
        titleRow.createCell(5).setCellValue("电话");
        //6.写数据
        // 5.为sheet添加后续行
        int cell = 2;
        for (Person riskUser : list) {
            Row row = sheet.createRow(cell);// 从第二行开始保存数据
            Cell cell2 = row.createCell(0);
            cell2.setCellStyle(cellStyle);
            cell2.setCellValue(riskUser.getId());

            row.createCell(1).setCellValue(riskUser.getName());// 将数据库的数据遍历出来
            row.createCell(2).setCellValue(riskUser.getCount());
            cell++;
        }


        try{
            // 6.设置Excel文件的名字
            String fileName = "user用户信息报表.xlsx";
            OutputStream outputStream = null;

            // 7.下载的文件的名字的编码为utf-8
            fileName = URLEncoder.encode(fileName, "UTF-8");
            // 设置ContentType请求信息格式 响应的内容格式
            // 8.输出数据类型--mima类型：参考：https://www.w3school.com.cn/media/media_mimeref.asp
            response.setContentType("application/vnd.ms-excel");
            // 9.控制用户请求所得的内容存为一个文件的时候提供一个默认的文件名，文件直接在浏览器上显示或者在访问时弹出文件下载对话框。
            // 参考：https://www.cnblogs.com/wq-9/articles/12165056.html
            response.setHeader("Content-disposition", "attachment;filename=" + fileName);
            // 10、通过response输出流输出excel对象
            outputStream = response.getOutputStream();
            wb.write(outputStream);
            outputStream.flush();
            outputStream.close();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
@Data
@AllArgsConstructor
@NoArgsConstructor
class Person{
    private Integer id;
    private String  name;
    private Integer count;
}
